// 导入 jsonwebtoken
const jsonwebtoken = require('jsonwebtoken')
const configKey = require('../config/index');
const {whiteList} = require('../config/whiteList')
const blackList = require('../config/blackList');

const verifyToken = (req, res, next) => {
  // 白名单放行
  if(whiteList.includes(req.originalUrl)){
    next()
  }else{
    const token = req.headers.authorization.split(' ')[1];
  
    if (!token) {
      return res.send({
        code: 401,
        msg: 'Token 不存在'
      })
    }
  
    if (blackList.has(token)) {
      return res.send({
        code: 401,
        msg: 'Token已经过期'
      })
    }
    // 如果验证通过，我们将解码后的 token 数据存储在请求对象的 user 属性中，并调用 next() 函数，将控制权传递给下一个中间件或路由处理程序
    // 解码后的 token 数据 decoded
    jsonwebtoken.verify(token, configKey.jwtSecretKey, (err, decoded) => {
      if (err) {
        return res.send({
          code: 401,
          msg: 'Token无效'
        })
      }
      // req.user = decoded
      next();
    });
  }
  
};

module.exports = verifyToken;